/*
axios第一次封装
*/

import axios from "axios";
import { getToken } from "./token";
import { showConfirmDialog } from "vant";

const http = axios.create({
  baseURL: import.meta.env.VITE_BASE_URL,
  timeout: 30000, //超时时间
});

/*
axios拦截器--》
-》请求拦截器
---请求之前可以做些事情
------一般会这里读取本地的token，设置请求头
-------开启请求加载提示
-》响应拦截器
---响应以后可以做些事情
------处理token过期问题
------处理请求出错
------结束请求加载提示
*/

// www.axios-http.cn/docs/interceptors

// 添加请求拦截器
http.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    let token = getToken();
    console.log(token);
    if (token) {
      //请求头中设置token
      config.headers["token"] = token;
    }
    // eslint-disable-next-line no-undef
    NProgress.start();
    return config;
  },
  function (error) {
    // 对请求错误做些什么

    return Promise.reject(error);
  },
);

// 添加响应拦截器
http.interceptors.response.use(
  function (response) {
    // eslint-disable-next-line no-undef
    NProgress.done();
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    //token过期了--让用户重新登录
    if (response.data.code == "10110") {
      // 没有的登录-弹出一个提示
      showConfirmDialog({
        title: "请求重新登录",
        message: response.data.message,
      })
        .then(() => {
          // on confirm
          this.$router.push("/login");
        })
        .catch(() => {
          // on cancel
        });
    }

    return response;
  },
  function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    // eslint-disable-next-line no-undef
    NProgress.done();
    return Promise.reject(error);
  },
);

export default http;
